import CryptoJS from 'crypto-js'
console.log('CryptoJS version:',import.meta.env.VITE_CRYPTO_KEY)
/**
 * AES 加密配置
 * 关键参数应从环境变量读取（非硬编码）
 */
const CRYPTO_CONFIG = {
  // 使用Vite环境变量（需在.env文件中配置）
  KEY: import.meta.env.VITE_CRYPTO_KEY || 'GaR4deUMHRFexBigqIOEVqPVIU7ez2Ew+kprvWj8J+Q=', // 32位密钥
  IV: import.meta.env.VITE_CRYPTO_IV || 'ITmDp8wsLwNUlD67rEAiCg==', // 16位初始向量
  MODE: CryptoJS.mode.CBC,
  PADDING: CryptoJS.pad.Pkcs7
} as const

/**
 * AES 加密（支持对象/字符串）
 * @param data 待加密数据
 * @returns 加密后的Base64字符串
 */
export function encrypt<T extends object | string>(data: T): string {
  try {
    const dataStr = typeof data === 'string' ? data : JSON.stringify(data)
    const encrypted = CryptoJS.AES.encrypt(dataStr, CryptoJS.enc.Utf8.parse(CRYPTO_CONFIG.KEY), {
      iv: CryptoJS.enc.Utf8.parse(CRYPTO_CONFIG.IV),
      mode: CRYPTO_CONFIG.MODE,
      padding: CRYPTO_CONFIG.PADDING
    })
    return encrypted.toString()
  } catch (error) {
    console.error('Encryption error:', error)
    throw new Error('数据加密失败')
  }
}

/**
 * AES 解密
 * @param cipherText 加密后的Base64字符串
 * @returns 解密后的原始数据（自动尝试JSON解析）
 */
export function decrypt<T = any>(cipherText: string): T | string {
  try {
    const decrypted = CryptoJS.AES.decrypt(cipherText, CryptoJS.enc.Utf8.parse(CRYPTO_CONFIG.KEY), {
      iv: CryptoJS.enc.Utf8.parse(CRYPTO_CONFIG.IV),
      mode: CRYPTO_CONFIG.MODE,
      padding: CRYPTO_CONFIG.PADDING
    })
    const str = decrypted.toString(CryptoJS.enc.Utf8)
    
    // 尝试解析为JSON对象
    try {
      return JSON.parse(str) as T
    } catch {
      return str
    }
  } catch (error) {
    console.error('Decryption error:', error)
    throw new Error('数据解密失败')
  }
}

/**
 * 生成随机加密密钥（开发环境辅助工具）
 * @returns { key: string; iv: string }
 */
export function generateKeyPair() {
  const key = CryptoJS.lib.WordArray.random(32).toString()
  const iv = CryptoJS.lib.WordArray.random(16).toString()
  return { key, iv }
}

// 类型导出
export type { AES, SHA256 } from 'crypto-js'